使用Perl脚本增强Alias功能

参数化Studio

Perl 脚本是本身是一种UNIX中的王牌工具,由于Alias本身是Linux软件的历史原因,alias
默认支持Perl脚本,本文就通过一个简单的例子,给大家演示如何,利用Perl脚本快速实现点的规则阵列。

Perl脚本的特点:

  • 凝练 Perl脚本的一大优势就是使用最简单的方式解决复杂问题,更夸张的是,很多时候,很长一段代码下来,竟然没有定义一个变量你敢信!
  • “只读" 下面这段代码大家感受下,perl被戏称为read only便不言自明了。
#!/usr/bin/perl
@lines = perldoc -u -f atan2;
foreach (@lines){
    s/\w<()[^>]+)>?|U$1/g;
    print;
}
  • 难于学习 由于perl语言设计之初的宗旨就是,尽可能的满足程序员的需要,所有对于我们这种普通用户难免显得有点难(是我见过最bug的),但是一劳永逸,大家还是忍忍吧,谁让规则是别人定义的.

Alias中的Perl脚本:

  • Alias perl脚本可以记录我们绝大部分的操作,并以Perl脚本的显示出来.就像下面这段代码这样

代码显示

selectFunction( "Nothing#23" );
clickWindowButtonXYZ( "Camera", 0, -1791.791687, -5130.841064,  1599.617615 );
clickWindowButtonXYZ(  "Camera", 0, 78.293103, 50.000000, 0.000000  ); # from select_item
selectFunction( "Nothing#23" );
setIntSymbol( "Component#67", "mo_pick_lights", 0 );
setIntSymbol( "Component#67", "mo_pick_constr_obj", 0 );
setIntSymbol( "Component#67", "mo_pick_curves", 1 );
setIntSymbol( "Component#67", "mo_pick_surfaces", 0 );
setIntSymbol( "Component#67", "mo_pick_others", 0 );
setIntSymbol( "Component#67", "mo_pick_all", 0 );
setIntSymbol( "Component#67", "mo_pick_shells", 0 );
setIntSymbol( "Component#67", "mo_pick_scans", 0 );
setIntSymbol( "Component#67", "mo_pick_meshes", 0 );
setIntSymbol( "Component#67", "mo_pick_surface_type", 2 );
selectFunction( "Component#67" );
initTrace( "Camera", "Component#67", 7480359,  -179.182861,  -513.081665,   159.965591 );
appendTracePoint( 7480359,  -179.183838,  -513.082336,   159.962357 );
endTrace(7480359);
selectFunction( "SurfaceFillet#18" );
clickWindowButtonXYZ( "Camera", 0, -1791.746979, -5130.839233,  1599.674377 );
clickWindowButtonXYZ( "Camera", 0, -1791.639709, -5130.895386,  1599.610291 );
clickWindowButtonXYZ( "Camera", 0, -1791.770477, -5130.861206,  1599.576111 );
clickWindowButtonXYZ( "Camera", 0, -1791.620636, -5130.880127,  1599.682159 );

Perl脚本的一种操作就是直接用这个记录下的代码直接运行即可,玩过拳皇吧,连招会放吧,没错原理基本上是一样的,还有一个更洋气的名字,。使用场景呢,经常我们在项目后期需要做大量的倒角工作。而且有些地方不完全倒完还看不出全部的效果,如何呢,我们需要一遍又一遍的重复?NO NO NO

image

我们只需要将上框中的记录历史复制到下框即可,然后点击RUN-execute
大功告成,剩下的时间只需要倒一杯水,慢慢收割旁边朋友的羡慕眼神吧,嘻嘻。

  • 参数化设计 Perl脚本的实力当然不止于此,更厉害的来了,Abracadabra~~~
    下面我们要让各位看官认识一种奇怪的阵列。
image

如何?是不是头有点晕,熟悉Alias阵列工具的经过仔细观察,这个阵列是无法用alias直接生成的(请仔细观察!)。

这个阵列其实是一个经典数学问题,而且前人已经给出相关的方程

alpha= n*137.5

r = c*sqrt n

137.5是什么呢,可以理解为一个数学常亮吧,是这个图形能够完美紧致的前提。下图是137.3度和137.6度的结果,是不是瞬间丧失了紧致的美感。

image

然后就是见证奇迹的时刻了。利用学到的Perl语法,把这个公式编写进去,就得到了下面这个代码。


$height=600;
$width= 600;
$nbr_circles = 100;
$PI = 3.14159265359;

$phi = (sqrt(5)+1)/2 - 1;
# golden ratio
$golden_angle = $phi * 2 *$PI;
# golden angle

$lg_rad = $width * 0.45;
$lg_area = ($lg_rad)*($lg_rad)  * $PI;

$sm_area = $lg_area / $nbr_circles;
# Area of our little circles, if they filled the space entirely
$sm_rad = sqrt( $sm_area / $PI );
# This is related to the equation area = pi r squared

$fudge =0.5;
# Fudge factor, since our circles don't actually fill up space entirely.
$adj_sm_diameter = $sm_rad * 2 * $fudge;

$cx = $width/2;
$cy = $height/2;
$gx = 0;
$gy = 0;

for ($i = 1; $i <= $nbr_circles; $i++) {
  selectFunction( "Circle" );
  $angle = $i*$golden_angle;
  $cum_area = $i*$sm_area;
  $spiral_rad = sqrt( $cum_area /$PI );
$x =  cos($angle) * $spiral_rad;
  $y =  sin($angle) * $spiral_rad;
clickWindowButtonXYZ( "Camera", 0,  $x, $y,  0 );
print "$x - $y\n";
$distance =5-sqrt(sqrt(($x-$gx)*($x-$gx) + ($y-$gy)*($y-$gy)));
selectFunction( "Scale" );
sendString( "$distance" );

}

image

将这个代码键入到INPUT 框中去,然后执行。然后再倒一杯水,再次收割旁人的崇拜目光。
慢慢享受啪啪啪一个一个圆的生成。

image

经过一段时间的使用,认为Perl脚本在alias中的应用还是有很多限制,距离项目实际使用还有一段距离。但是同时Perl脚本的出现为参数化建模指出了一个新的思路,不用将所有参数化相关的问题放在GH中解决。相信经过一段时间的发展,Perl一定会进入我们的数模制作流程,进一步的提高工作效率。最后预祝大家工作顺利。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容